A relational database is a collection of logically related data that includes tables (or relations) made up of rows (or tuples) and columns (or attributes). Each row represents an occurrence of an entity defined by a table, with an entity being a person, place, or thing about which the table contains information. To extract data from, or to update, a relational table, queries according to a standard database query language (e.g., Structured Query Language or SQL) are used.
Queries submitted to a database system are parsed by a parser, which generates a query plan submitted to one or more processing units in the database system to perform reading, updating, or deleting of data in one or more tables specified by each query. In database systems having tables that contain large amounts of data, complex queries can take a relatively long time (e.g., hours or days) to execute.
Some database systems provide simple progress indicators to provide feedback to users regarding the progress of the execution of queries. One type of progress indicator is based on an estimate of query running time provided by the optimizer. Although generating a progress indicator based upon the optimizer's estimate of query running time is relatively simple, the optimizer's estimate may not always be accurate. The inaccuracy stems from the fact that the optimizer's query cost estimates usually contain errors, and that a particular system loading (such as low or no system loading) is assumed. In an actual database system, a heavy loading may be present, which renders some query cost estimates inaccurate.
Thus, conventional database systems have not generally provided adequate progress indicators.